home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d17 / proff.arc / MAP.C < prev    next >
C/C++ Source or Header  |  1988-02-17  |  1KB  |  71 lines

  1. #include <stdio.h>
  2. /*
  3.  * map map every character of s1 that is specified in s2
  4.  * into s3 and replace in s. (source s1 remains untouched)
  5.  */
  6.  
  7. map(s,s1,s2,s3)
  8. register char *s;
  9. register char *s1;
  10. register char *s2;
  11. register char *s3;
  12. {
  13.     char *t, *t1;
  14.     if (*s1 != '\0') {
  15.         t = s;
  16.         t1 = s1;
  17.         strcpy(t,t1);
  18.  
  19.         while (*s2 != '\0' && *s3 != '\0') {
  20.             while (*t1 != '\0') {
  21.                 if (*t1 == *s2)
  22.                     *t = *s3;
  23.                 t++; 
  24.                 t1++;
  25.             }
  26.             t = s;
  27.             t1 = s1;
  28.             s2++;
  29.             s3++;
  30.         }
  31.     }
  32.     else
  33.         *s = '\0';
  34. }
  35.  
  36. /*
  37.  * roman - convert a numeric string into roman numerals
  38.  *
  39.  * icon version:
  40.  *procedure roman(n)
  41.  * local arabic, result
  42.  * static equiv
  43.  * initial equiv := ["","I","II","III","IV","V","VI","VII","VIII","IX"]
  44.  * integer(n) > 0 | fail
  45.  * result := ""
  46.  * every arabic := !n do
  47.  *    result := map(result,"IVXLCDM","XLCDM**") || equiv[arabic+1]
  48.  * if find("*",result) then fail else return result
  49.  * end
  50.  *
  51.  */
  52. int 
  53. cvtroman(num,rom)
  54. char *num;
  55. char *rom;
  56. {
  57.     char tmp[20];
  58.  
  59. static char *equiv_U[] = { "","I","II","III","IV","V","VI","VII","VIII","IX" };
  60.  
  61.     *rom = NULL;
  62.     while (*num != '\0') {
  63.         map(tmp,rom,"IVXLCDM","XLCDM**");
  64.         strcpy(rom,tmp);
  65.         strcat(rom,equiv_U[*num - '0']);
  66.         num++;
  67.     }
  68.     return(strlen(rom));
  69. }
  70.  
  71.